<?php

class PreInscripcionController extends Controller {

    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout = '//layouts/column2';

    /**
     * @return array action filters
     */
    public function filters() {
        return array(
            //'accessControl', // perform access control for CRUD operations
            'rights',
        );
    }

    /**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
    public function accessRules() {
        return array(
            array('allow', // allow all users to perform 'index' and 'view' actions
                'actions' => array('index', 'view'),
                'users' => array('*'),
            ),
            array('allow', // allow authenticated user to perform 'create' and 'update' actions
                'actions' => array('create', 'update'),
                'users' => array('@'),
            ),
            array('allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions' => array('admin', 'delete'),
                'users' => array('admin'),
            ),
            array('deny', // deny all users
                'users' => array('*'),
            ),
        );
    }

    /**
     * Displays a particular model.
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView(
    $preinscripcion_ingreso_periodoingreso_id, $preinscripcion_ingreso_programaacademico_id, $preinscripcion_alumno_persona_tipodocumento_id, $preinscripcion_alumno_persona_numerodocumento) {
        $this->render('view', array(
            'model' => $this->loadModel($preinscripcion_ingreso_periodoingreso_id, $preinscripcion_ingreso_programaacademico_id, $preinscripcion_alumno_persona_tipodocumento_id, $preinscripcion_alumno_persona_numerodocumento),
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate() {
        $model = new PreInscripcion;

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if (isset($_POST['PreInscripcion'])) {
            $model->attributes = $_POST['PreInscripcion'];
            if ($model->save())
                $this->redirect(array('view', 'id' => $model->preinscripcion_ingreso_periodoingreso_id));
        }

        $this->render('create', array(
            'model' => $model,
        ));
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($preinscripcion_ingreso_periodoingreso_id, $preinscripcion_ingreso_programaacademico_id, $preinscripcion_alumno_persona_tipodocumento_id, $preinscripcion_alumno_persona_numerodocumento) {
        $model = $this->loadModel($preinscripcion_ingreso_periodoingreso_id, $preinscripcion_ingreso_programaacademico_id, $preinscripcion_alumno_persona_tipodocumento_id, $preinscripcion_alumno_persona_numerodocumento);

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if (isset($_POST['PreInscripcion'])) {
            $model->attributes = $_POST['PreInscripcion'];
            if ($model->save())
                $this->redirect(array('view', 'id' => $model->preinscripcion_ingreso_periodoingreso_id));
        }

        $this->render('update', array(
            'model' => $model,
        ));
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($preinscripcion_ingreso_periodoingreso_id, $preinscripcion_ingreso_programaacademico_id, $preinscripcion_alumno_persona_tipodocumento_id, $preinscripcion_alumno_persona_numerodocumento) {
        if (Yii::app()->request->isPostRequest) {
            // we only allow deletion via POST request
            $model = $this->loadModel($preinscripcion_ingreso_periodoingreso_id, $preinscripcion_ingreso_programaacademico_id, $preinscripcion_alumno_persona_tipodocumento_id, $preinscripcion_alumno_persona_numerodocumento);

            $model->preinscripcion_estado_id = AplicacionVariables::ESTADO_ELIMINADO_ID;

            $model->save();

            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
            if (!isset($_GET['ajax']))
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
        }
        else
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }

    /**
     * Lists all models.
     */
    public function actionIndex() {
        /*
          $dataProvider=new CActiveDataProvider('PreInscripcion');
          $this->render('index',array(
          'dataProvider'=>$dataProvider,
          ));
         */
        $this->actionAdmin();
    }

    /**
     * Manages all models.
     */
    public function actionAdmin() {
        $model = new PreInscripcion('search');
        $model->unsetAttributes();  // clear any default values
        if (isset($_GET['PreInscripcion']))
            $model->attributes = $_GET['PreInscripcion'];

        $this->render('admin', array(
            'model' => $model,
        ));
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     * @param integer the ID of the model to be loaded
     */
    public function loadModel($preinscripcion_ingreso_periodoingreso_id, $preinscripcion_ingreso_programaacademico_id, $preinscripcion_alumno_persona_tipodocumento_id, $preinscripcion_alumno_persona_numerodocumento) {
        $model = PreInscripcion::model()->findByPk(
                array(
                    'preinscripcion_ingreso_periodoingreso_id' => $preinscripcion_ingreso_periodoingreso_id,
                    'preinscripcion_ingreso_programaacademico_id' => $preinscripcion_ingreso_programaacademico_id,
                    'preinscripcion_alumno_persona_tipodocumento_id' => $preinscripcion_alumno_persona_tipodocumento_id,
                    'preinscripcion_alumno_persona_numerodocumento' => $preinscripcion_alumno_persona_numerodocumento
                )
        );
        if ($model === null)
            throw new CHttpException(404, 'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param CModel the model to be validated
     */
    protected function performAjaxValidation($model) {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'pre-inscripcion-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }

    public function beforeAction($action) {

        $config = array();
        switch ($action->id) {
            case 'inscripcion':

                $config = array(
                    'steps' => array(
                        t('Buscar Alumno', 'carrera_etiqueta') => 'alumnoBusqueda',
                        t('Seleccionar Periodo y Programa', 'carrera_etiqueta') => 'periodoProgramaBusqueda',
                        t('Datos de Inscripcion', 'carrera_etiqueta') => 'datosInscripcion',),
                    'forwardOnly' => true,
                    'events' => array(
                        'onStart' => 'wizardStart',
                        'onProcessStep' => 'parseInscripcionSteps',
                        'onFinished' => 'savePreInscripcion',
                        'onInvalidStep' => 'wizardInvalidStep',
                    ),
                );
                break;
            default:
                break;
        }
        if (!empty($config)) {
            $config['class'] = 'application.components.WizardBehavior';
            $this->attachBehavior('wizard', $config);
        }
        return parent::beforeAction($action);
    }

    public function actionInscripcion($step = null) {
        $this->process($step);
    }

    public function actionUpdateInscripcion($preinscripcion_ingreso_periodoingreso_id, $preinscripcion_ingreso_programaacademico_id, $preinscripcion_alumno_persona_tipodocumento_id, $preinscripcion_alumno_persona_numerodocumento) {
        $model = $this->loadModel($preinscripcion_ingreso_periodoingreso_id, $preinscripcion_ingreso_programaacademico_id, $preinscripcion_alumno_persona_tipodocumento_id, $preinscripcion_alumno_persona_numerodocumento);
        $model->setScenario('inscripcion');

        if (isset($_POST['PreInscripcion']['preinscripcion_turno_id'])) {
            $error = false;
            //seteo datos sobre el turno y la eleccion del mismo
            $model = PreInscripcionService::setTurno($model, $_POST);

            $model = PreInscripcionService::setCurso($model, $_POST);

            $model = PreInscripcionService::setBaja($model, $_POST);

            $model->documentacionIngresoPersona = PreInscripcionService::setDocumentacionIngresoPersona($model, $_POST);
            //ahora valido la documentacion

            foreach ($model->documentacionIngresoPersona as $docIngPer) {
                if (count($docIngPer->getErrors()) != 0) {
                    $error = true;
                    break;
                }
            }

            if (!$error) {
                $transaction = $model->dbConnection->beginTransaction();
                try {
                    //echo $model->preinscripcion_alumno_persona_tipodocumento_id;exit;
                    if (!$model->save()) {
                        throw new Exception(t("Problema al guardar Inscripcion"));
                    }

                    $criteria = new CDbCriteria;
                    $criteria->addCondition('documentacioningresopersona_ingreso_periodoingreso_id = :periodoID');
                    $criteria->addCondition('documentacioningresopersona_ingreso_programaacademico_id = :programaID');
                    $criteria->addCondition('documentacioningresopersona_persona_numerodocumento = :numDOC');
                    $criteria->addCondition('documentacioningresopersona_persona_tipodocumento_id = :tipoDOC');
                    $criteria->params = array(
                        ':periodoID' => $model->preinscripcion_ingreso_periodoingreso_id,
                        ':programaID' => $model->preinscripcion_ingreso_programaacademico_id,
                        ':numDOC' => $model->preinscripcion_alumno_persona_numerodocumento,
                        ':tipoDOC' => $model->preinscripcion_alumno_persona_tipodocumento_id
                    );
                    $originalesDocIngPer = DocumentacionIngresoPersona::model()->findAll($criteria);

                    $criteria = new CDbCriteria;
                    $criteria->addCondition('documentacioningresopersona_ingreso_periodoingreso_id = :periodoID');
                    $criteria->addCondition('documentacioningresopersona_ingreso_programaacademico_id = :programaID');
                    $criteria->addCondition('documentacioningresopersona_persona_numerodocumento = :numDOC');
                    $criteria->addCondition('documentacioningresopersona_persona_tipodocumento_id = :tipoDOC');
                    $criteria->params = array(
                        ':periodoID' => $model->preinscripcion_ingreso_periodoingreso_id,
                        ':programaID' => $model->preinscripcion_ingreso_programaacademico_id,
                        ':numDOC' => $model->preinscripcion_alumno_persona_numerodocumento,
                        ':tipoDOC' => $model->preinscripcion_alumno_persona_tipodocumento_id
                    );
                    DocumentacionIngresoPersona::model()->deleteAll($criteria);

                    foreach ($model->documentacionIngresoPersona as $docIngPer) {
                        foreach ($originalesDocIngPer as $originalDocIngPer) {
                            if ($docIngPer->documentacioningresopersona_documentacioningreso_id == $originalDocIngPer->documentacioningresopersona_documentacioningreso_id) {
                                $docIngPer->documentacioningresopersona_creado = $originalDocIngPer->documentacioningresopersona_creado;
                                $docIngPer->documentacioningresopersona_creado_usuario_id = $originalDocIngPer->documentacioningresopersona_creado_usuario_id;
                                break;
                            }
                        }
                        if (!$docIngPer->validate()) {
                            throw new Exception(t("Documentacion con errores"));
                        }
                        
                        if (!$docIngPer->save()) {
                            throw new Exception(t("No se pudo guardar la Documentacion"));
                        }
                    }
                    $transaction->commit();
                    $this->redirect(
                            array(
                                'view',
                                'preinscripcion_ingreso_periodoingreso_id' => $model->preinscripcion_ingreso_periodoingreso_id,
                                'preinscripcion_ingreso_programaacademico_id' => $model->preinscripcion_ingreso_programaacademico_id,
                                'preinscripcion_alumno_persona_tipodocumento_id' => $model->preinscripcion_alumno_persona_tipodocumento_id,
                                'preinscripcion_alumno_persona_numerodocumento' => $model->preinscripcion_alumno_persona_numerodocumento,
                            )
                    );
                } catch (Exception $e) {

                    $model->addError('preinscripcion_other', $e->getMessage());
                    $transaction->rollBack();
                }
            }
        }



        $this->_addInscripcionScript();
        $this->render('updateInscripcion', compact('event', 'model'));
    }

    private function _parseAlumno($event) {
        $pasoValidado = false;
        $model = new Alumno;

        if (isset($_POST['Persona']['originalNumeroDoc'])
                && isset($_POST['Persona']['originalTipoDoc'])
        ) {
            if (trim(isset($_POST['Persona']['originalNumeroDoc'])) != '' && trim($_POST['Persona']['originalNumeroDoc']) != '') {
                $_POST['Persona']['persona_numerodocumento'] = $_POST['Persona']['originalNumeroDoc'];
                $_POST['Persona']['persona_tipodocumento_id'] = $_POST['Persona']['originalTipoDoc'];
                //seteo Persona,comunicacion.estudio,direccion,trabajo,familiar
                $model->persona = PersonaService::setPersona();

                $model->alumno_persona_numerodocumento = $model->persona->persona_numerodocumento;
                $model->alumno_persona_tipodocumento_id = $model->persona->persona_tipodocumento_id;

                $estadoContable = ContableService::getEstadoContablePersona($model->persona, ContableService::HABILITACION_INSCRIPCION);
                $model->persona->tipoDocumento = TipoDocumento::model()->findByPk($model->persona->persona_tipodocumento_id);

                if ($estadoContable['AUTOGESTION_ESTADO'] || $estadoContable['BAS_ESTADO']) {
                    $pasoValidado = true;
                    $event->sender->save($model->attributes);
                    $event->handled = true;
                } else {
                    $model->addError('persona_contable_bas', $estadoContable['BAS_MENSAJE']);
                    $model->addError('persona_contable_autogestion', $estadoContable['AUTOGESTION_MENSAJE']);
                }
            } else {
                $model->addError('alumno_persona', t('Debe Seleccionar una Persona', 'persona_etiqueta'));
            }
        } else {
            if (isset($event->data['alumno_persona_numerodocumento'])) {
                $criteria = new CDbCriteria();
                $criteria->condition = 'alumno_persona_numerodocumento = :numDOC AND alumno_persona_tipodocumento_id = :tipoDOC';
                $criteria->params = array(':numDOC' => $event->data['alumno_persona_numerodocumento'], ':tipoDOC' => $event->data['alumno_persona_tipodocumento_id']);
                $model = Alumno::model()->find($criteria);
            }
        }

        if (!$pasoValidado) {
            $this->render('inscripcion', compact('event', 'form', 'model'));
        }
    }

    private function _parseIngresoPrograma($event) {
        $model = new Ingreso;
        $pasoValidado = false;

        if (isset($_POST['Ingreso']['ingreso_periodoingreso_id'])) { //selecciono periodo de ingreso
            if (intval($_POST['Ingreso']['ingreso_periodoingreso_id']) != 0) {
                $model->ingreso_periodoingreso_id = $_POST['Ingreso']['ingreso_periodoingreso_id'];
                $programasAcademicosAbiertos = ProgramaAcademicoService::getProgramaAcademicosAbiertosPorIngreso($model->ingreso_periodoingreso_id);

                $data = $event->sender->read('alumnoBusqueda');

                $alumno = new Alumno();
                $alumno->alumno_persona_numerodocumento = $data['alumno_persona_numerodocumento'];
                $alumno->alumno_persona_tipodocumento_id = $data['alumno_persona_tipodocumento_id'];

                $inscripcionesDelAlumno = PreInscripcionService::getPreInscripcionesAlumno($alumno, $model);
            } else {
                $model->addError('ingreso_programa', t('Debe Seleccionar un Programa', 'persona_etiqueta'));
            }
        }


        if (isset($_POST['ProgramaAcademico']['programaacademico_id'])
                && intval($_POST['ProgramaAcademico']['programaacademico_id']) != 0) { //selecciono un programa academico y un periodo

            $model->ingreso_periodoingreso_id = $_POST['Ingreso']['ingreso_periodoingreso_id'];
            $model->ingreso_programaacademico_id = $_POST['ProgramaAcademico']['programaacademico_id'];

            //si ese programa tiene entrevista de visita y no esta aprobado no lo dejo inscribir
            $ingresoPrograma = Ingreso::model()->findByPk(
                    array(
                        'ingreso_periodoingreso_id' => $model->ingreso_periodoingreso_id,
                        'ingreso_programaacademico_id' => $model->ingreso_programaacademico_id,
                        'ingreso_estado_id' => AplicacionVariables::ESTADO_ACTIVO_ID
                    )
            );
            if (!is_null($ingresoPrograma) && $ingresoPrograma->ingreso_entrevista) {//si ese programa tiene entrevista
                $data = $event->sender->read('alumnoBusqueda');
                $personaEntrevista = IngresoEntrevista::model()->findByAttributes(
                        array(
                            'ingresoentrevista_persona_tipodocumento_id' => $data['alumno_persona_tipodocumento_id'],
                            'ingresoentrevista_persona_numerodocumento' => $data['alumno_persona_numerodocumento'],
                            'ingresoentrevista_periodoingreso_id' => $model->ingreso_periodoingreso_id,
                            'ingresoentrevista_programaacademico_id' => $model->ingreso_programaacademico_id,
                        )
                );

                if (!is_null($personaEntrevista) && $personaEntrevista->ingresoentrevista_aceptado) {
                    $pasoValidado = true;
                    $event->sender->save($model->attributes);
                    $event->handled = true;
                } else {
                    $model->addError('persona_entrevista_ingreso', t('Entrevista de Ingreso no existe o no esta aprobada', 'carrera_etiqueta'));
                    $_POST['ProgramaAcademico']['programaacademico_id'] = null; //limpio el programa seleccionado	
                }
            } else {
                $pasoValidado = true;
                $event->sender->save($model->attributes);
                $event->handled = true;
            }
        }


        if (!$pasoValidado) {
            $this->render('inscripcion', compact('event', 'form', 'model', 'programasAcademicosAbiertos', 'inscripcionesDelAlumno'));
        }
    }

    private function _addInscripcionScript() {
        $direccionScriptPath = Yii::app()->baseUrl . '/script/modules/carrera';
        $cs = Yii::app()->getClientScript();
        $cs->registerScriptFile($direccionScriptPath . '/preInscripcion.js', CClientScript::POS_END);
        $cs->registerScript('cargar-preisncripcion-variable', 'var preInscripcion = new PreInscripcion();', CClientScript::POS_END);
        $cs->registerScript('setearEventosDatosInscripcion', 'preInscripcion.setearEventosDatosInscripcion();', CClientScript::POS_END);
    }

    private function _parsePreInscripcion($event) {
        $pasoValidado = false;
        $model = new PreInscripcion('inscripcion');
		$model->setScenario('inscripcion');
        $model = $this->parseData($model, $event);
        $model->documentacionIngresoPersona = PreInscripcionService::setDocumentacionIngresoPersona($model, $_POST);

        //echo $model->preinscripcion_ingreso_programaacademico_id;exit;
        if (isset($_POST['PreInscripcion']['preinscripcion_turno_id']) && $model->validate()) {
            //ahora valido la documentacion
			
            $error = false;
			if(is_null($model->documentacionIngresoPersona))
			{
				$error = true;
				$model->addError('no_atribute_asociated', t('Debe seleccionar una documentacion','carrera_etiqueta'));
			}
			else 
			{
				foreach ($model->documentacionIngresoPersona as $docIngPer) {
	                if (count($docIngPer->getErrors()) != 0) {
	                    $error = true;
	                    break;
	                }
	            }
			}
			
            

            if (!$error) {
                $transaction = $model->dbConnection->beginTransaction();
                try {
                    //echo $model->preinscripcion_alumno_persona_tipodocumento_id;exit;
                    if (!$model->save()) {
                        throw new Exception(t("Problema al guardar Inscripcion"));
                    }

                    $criteria = new CDbCriteria;
                    $criteria->addCondition('documentacioningresopersona_ingreso_periodoingreso_id = :periodoID');
                    $criteria->addCondition('documentacioningresopersona_ingreso_programaacademico_id = :programaID');
                    $criteria->addCondition('documentacioningresopersona_persona_numerodocumento = :numDOC');
                    $criteria->addCondition('documentacioningresopersona_persona_tipodocumento_id = :tipoDOC');
                    $criteria->params = array(
                        ':periodoID' => $model->preinscripcion_ingreso_periodoingreso_id,
                        ':programaID' => $model->preinscripcion_ingreso_programaacademico_id,
                        ':numDOC' => $model->preinscripcion_alumno_persona_numerodocumento,
                        ':tipoDOC' => $model->preinscripcion_alumno_persona_tipodocumento_id
                    );
                    DocumentacionIngresoPersona::model()->deleteAll($criteria);

                    foreach ($model->documentacionIngresoPersona as $docIngPer) {
                        if (!$docIngPer->validate()) {
                            throw new Exception(t("Documentacion con errores"));
                        }
                        if (!$docIngPer->save()) {
                            throw new Exception(t("No se pudo guardar la Documentacion"));
                        }
                    }
                    $transaction->commit();
                    $pasoValidado = true;
                    $event->sender->save($model);
                    $event->handled = true;
                } catch (Exception $e) {

                    $model->addError('preinscripcion_other', $e->getMessage());
                    $transaction->rollBack();
                }
            }
        }



        if (!$pasoValidado) {
            $this->_addInscripcionScript();
            $this->render('inscripcion', compact('event', 'model'));
        }
    }

    private function parseData(PreInscripcion $preInscripcion, $event) {
        $data = $event->sender->read('periodoProgramaBusqueda');
        $preInscripcion->ingreso = Ingreso::model()->findByPk(
                array(
                    'ingreso_periodoingreso_id' => $data['ingreso_periodoingreso_id'],
                    'ingreso_programaacademico_id' => $data['ingreso_programaacademico_id'],
                    'ingreso_estado_id' => AplicacionVariables::ESTADO_ACTIVO_ID
                )
        );

        if (isset($_POST['PreInscripcion']['preinscripcion_turno_id'])) {//si submiteo el formulario de datos de inscripcion
            $data = $event->sender->read();
            //var_dump($data);exit;
            //dato persona
            $preInscripcion->preinscripcion_alumno_persona_numerodocumento = $data['alumnoBusqueda']['alumno_persona_numerodocumento'];
            $preInscripcion->preinscripcion_alumno_persona_tipodocumento_id = $data['alumnoBusqueda']['alumno_persona_tipodocumento_id'];
            //echo $preInscripcion->preinscripcion_alumno_persona_tipodocumento_id;exit;
            //dato programa y periodo
            $preInscripcion->preinscripcion_ingreso_periodoingreso_id = $data['periodoProgramaBusqueda']['ingreso_periodoingreso_id'];
            $preInscripcion->preinscripcion_ingreso_programaacademico_id = $data['periodoProgramaBusqueda']['ingreso_programaacademico_id'];

            //dato turnos
            $preInscripcion->preinscripcion_turno_id = $_POST['PreInscripcion']['preinscripcion_turno_id'];
            $preInscripcion->preinscripcion_turnoeleccion_id = $_POST['PreInscripcion']['preinscripcion_turnoeleccion_id'];

            //dato curso
            if (isset($_POST['PreInscripcion']['preinscripcion_ingresocurso_id'])) {//quiere decir que este programa tiene un curso de ingreso
                $preInscripcion->preinscripcion_cursoequivalente = $_POST['PreInscripcion']['preinscripcion_cursoequivalente'];

                if ($preInscripcion->preinscripcion_cursoequivalente == 0) {//significa que se lo aprobo por curso equivalente
                    $preInscripcion->preinscripcion_ingresocurso_id = $_POST['PreInscripcion']['preinscripcion_ingresocurso_id'];
                } else {
                    $preInscripcion->preinscripcion_ingresocurso_id = null;
                }
            }
            $preInscripcion->preinscripcion_estado_id = AplicacionVariables::ESTADO_ACTIVO_ID;
            $preInscripcion->preinscripcion_fecha = new CDbExpression('NOW()');
        }
        //echo $preInscripcion->preinscripcion_ingreso_periodoingreso_id;exit;
        //Aprobocursoingreso y Ingreso ? no los toco en esta instancia
        //echo $preInscripcion->preinscripcion_cursoequivalente;exit;

        return $preInscripcion;
    }

    /**
     * Process wizard steps.
     * The event handler must set $event->handled=true for the wizard to continue
     * @param WizardEvent The event
     */
    public function parseInscripcionSteps($event) {
        if (isset($_POST['cancelarInscripcion'])) {
            $data = $event->sender->reset();
            $this->redirect(array('admin'));
        }

        if ($event->step == 'alumnoBusqueda') {
            $this->_parseAlumno($event);
        }

        if ($event->step == 'periodoProgramaBusqueda') {
            $this->_parseIngresoPrograma($event);
        }

        if ($event->step == 'datosInscripcion') {
            $this->_parsePreInscripcion($event);
        }
    }

// Wizard Behavior Event Handlers
    /**
     * Raised when the wizard starts; before any steps are processed.
     * MUST set $event->handled=true for the wizard to continue.
     * Leaving $event->handled===false causes the onFinished event to be raised.
     * @param WizardEvent The event
     */
    public function wizardStart($event) {
        $event->handled = true;
    }

    public function wizardStartUpdate($event) {

        $event->handled = true;
        $this->process('datosInscripcion');
    }

    /**
     * Raised when the wizard detects an invalid step
     * @param WizardEvent The event
     */
    public function wizardInvalidStep($event) {
        Yii::app()->getUser()->setFlash(t('Noticia: el paso "', $event->step . '" no es un paso valido en este wizard'));
    }

    public function savePreInscripcion($event) {

        $model = $event->sender->read('datosInscripcion');
        $event->sender->reset();
        $this->redirect(
                array(
                    'admin',
                    'preinscripcion_alumno_persona_tipodocumento_id' => $model->preinscripcion_alumno_persona_tipodocumento_id,
                    'preinscripcion_alumno_persona_numerodocumento' => $model->preinscripcion_alumno_persona_numerodocumento
                )
        );
    }

    public function actionRegistrarAsistenciaNota() {
        $model = new PreInscripcion('search');
        $model->unsetAttributes();  // clear any default values
        if (isset($_GET['PreInscripcion']))
            $model->attributes = $_GET['PreInscripcion'];

        $this->render('registrarAsistenciaNota', array(
            'model' => $model,
        ));
    }

    public function actionCierrePlanilla(){
        $model = new PreInscripcion('search2');
        $model->unsetAttributes();  // clear any default values
        if (isset($_GET['PreInscripcion']))
        {
            $model->attributes = $_GET['PreInscripcion'];
        }
        //$coleccion = PreInscripcionService::getCierreDePlanillas($model);
        
        $this->render('cierrePlanilla', array(
            'model' => $model,
            //'coleccion' => $coleccion,
            
        ));
        
        
    }
    
    public function actionRegistrarCierrePlanilla()
    {
        $searchGeneral = new PreInscripcion();
        $resultadoBusqueda = null;
        if(isset($_POST['PreInscripcion']))
	{
            $searchGeneral->attributes=$_POST['PreInscripcion'];
	    $searchGeneral->setScenario('buscarCierrePlanilla');
            if($searchGeneral->validate())
            {
                $resultadoBusqueda = PreInscripcionService::getCierreDePlanillas($searchGeneral);
                //var_dump($resultadoBusqueda);exit;
            }
            if(isset($_POST['yt1']))
            {//busco
                
                $preInscripcionesModificadas = PreInscripcionService::setCierreDePlanillas($searchGeneral, $_POST);
		$error = false;
		foreach ($preInscripcionesModificadas as $item)
		{
                    if(!$item->validate())
                    {
                        $error = true;
			break;
                    }
		}
				
		if(!$error)
                {
                    $transaction=$searchGeneral->dbConnection->beginTransaction();
                    try
                    {
                           $errorTransaccion = false;
                            foreach ($preInscripcionesModificadas as $item)
                            {
                                    if(!$item->save())
                                    {
                                            $errorTransaccion = true;
                                            $transaction->rollBack();
                                            $item->addError('inpr_nota',t('No se pudo grabar', 'carrera_etiqueta'));
                                            break;
                                    }
                            }

                            if(!$errorTransaccion)
                            {
                                    $transaction->commit();
                                    $this->redirect(array('cierrePlanilla'));
                            }


                    }
                    catch(Exception $e)
                    {
                        $searchGeneral->addError('inpr_nota', t('Problema con la transaccion','persona_etiqueta'));
                        $transaction->rollBack();
                    }
		}	
            }	
	}

        $this->render('createCierrePlanilla',array(
                'model'=>$searchGeneral,
                'resultadoBusqueda'=>$resultadoBusqueda,
        ));
    }
    
    
    public function actionDefinicionDeIngresante(){
        $model = new PreInscripcion('search2');
        $model->unsetAttributes();  // clear any default values
        if (isset($_GET['PreInscripcion']))
        {
            $model->attributes = $_GET['PreInscripcion'];
        }
        //$coleccion = PreInscripcionService::getCierreDePlanillas($model);
        
        $this->render('definicionIngresante', array(
            'model' => $model,
            //'coleccion' => $coleccion,
            
        ));   
    }
    
    public function actionRegistrarIngresante()
    {
        $searchGeneral = new PreInscripcion();
        $resultadoBusqueda = null;
        if(isset($_POST['PreInscripcion']))
	{
            $searchGeneral->attributes=$_POST['PreInscripcion'];
	    	$searchGeneral->setScenario('buscarDefinicionIngresante');
            if($searchGeneral->validate())
            {
                $resultadoBusqueda = PreInscripcionService::getCierreDePlanillas($searchGeneral);
                //var_dump($resultadoBusqueda);exit;
            }
            if(isset($_POST['yt1']))
            {//busco
            	
                $preInscripcionesModificadas = PreInscripcionService::setDefinicionIngresantes($searchGeneral, $_POST);
		$error = false;
		foreach ($preInscripcionesModificadas as $item)
		{
                    if(!$item->validate())
                    {
                        $error = true;
			break;
                    }
		}
				
		if(!$error)
                {
                    $transaction=$searchGeneral->dbConnection->beginTransaction();
                    try
                    {
                           $errorTransaccion = false;
                            foreach ($preInscripcionesModificadas as $item)
                            {
                                    if(!$item->save())
                                    {
                                            $errorTransaccion = true;
                                            $transaction->rollBack();
                                            $item->addError('inpr_nota',t('No se pudo grabar', 'carrera_etiqueta'));
                                            break;
                                    }
                            }

                            if(!$errorTransaccion)
                            {
                                    $transaction->commit();
                                    $this->redirect(array('definicionDeIngresante'));
                            }


                    }
                    catch(Exception $e)
                    {
                        $searchGeneral->addError('inpr_nota', t('Problema con la transaccion','persona_etiqueta'));
                        $transaction->rollBack();
                    }
		}	
            }	
	}

        $this->render('createIngresantes',array(
                'model'=>$searchGeneral,
                'resultadoBusqueda'=>$resultadoBusqueda,
        ));
    }
    
}
